package com.ib.algokit.marketscan;

import org.activequant.core.domainmodel.marketscanner.MarketScan;
import org.activequant.core.domainmodel.marketscanner.MarketScanChange;
import org.activequant.util.pattern.events.IEventListener;
/**
 * An interface. Defines the following methods:
 * <ul>
 * <li>void processNewMarketScan(MarketScan previousScan, MarketScan newScan)</li>
 * <li>void subscribeForInstrumentAddedEvents(IEventListener&lt;MarketScanChange&gt; listener)</li>
 * <li>void subscribeForInstrumentRemovedEvents(IEventListener&lt;MarketScanChange&gt; listener)</li>
 * <li>void subscribeForInstrumentMovedUpEvents(IEventListener&lt;MarketScanChange&gt; listener)</li>
 * <li>void subscribeForInstrumentMovedDownEvents(IEventListener&lt;MarketScanChange&gt; listener)</li>
 * <li>void unsubscribeFromInstrumentAddedEvents(IEventListener&lt;MarketScanChange&gt; listener)</li>
 * <li>void unsubscribeFromInstrumentRemovedEvents(IEventListener&lt;MarketScanChange&gt; listener)</li>
 * <li>void unsubscribeFromInstrumentMovedUpEvents(IEventListener&lt;MarketScanChange&gt; listener)</li>
 * <li>void unsubscribeFromInstrumentMovedDownEvents(IEventListener&lt;MarketScanChange&gt; listener)</li>
 * </ul>
 * @author Dimitar
 *
 */
public interface IMarketScanEventProcessingStrategy {
	
	 void processNewMarketScan(MarketScan previousScan, MarketScan newScan);
	 
	 void subscribeForInstrumentAddedEvents(IEventListener<MarketScanChange> listener);
	 
	 void subscribeForInstrumentRemovedEvents(IEventListener<MarketScanChange> listener);
	 
	 void subscribeForInstrumentMovedUpEvents(IEventListener<MarketScanChange> listener);
	 
	 void subscribeForInstrumentMovedDownEvents(IEventListener<MarketScanChange> listener);
	 
	 void unsubscribeFromInstrumentAddedEvents(IEventListener<MarketScanChange> listener);
	 
	 void unsubscribeFromInstrumentRemovedEvents(IEventListener<MarketScanChange> listener);
	 
	 void unsubscribeFromInstrumentMovedUpEvents(IEventListener<MarketScanChange> listener);
	 
	 void unsubscribeFromInstrumentMovedDownEvents(IEventListener<MarketScanChange> listener);

}
